package openbang.account.service.vo;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import openbang.common.vo.CacheAvailable;

/**
 * 记录一个聊天群的参与人,发布的信息
 * 
 * 该对象要放入  Cache 中存放
 * 
 * @author aibozeng
 *
 */

@SuppressWarnings("serial")
public class ChatGroupMsg extends ChatGroup implements CacheAvailable{
    
    private long msgToken = 0 ; //每发布一个消息,令牌累加,
    
    
    private List<ChatMsg> chatMsgs = new ArrayList<ChatMsg>();
    
    private int msgMaxLive = 1000*60*5 ; //消息最多存活 5分钟
    
    private Date lastAccessDate = null;
    
    public ChatGroupMsg(){    	
    }

    public ChatGroupMsg(String groupId , String subject , String password , String creator){
    	super(groupId,subject,password,creator);
    }
    

    /**
     * 增加一个聊天者
     * @param participant
     */
    public boolean addParticipant(String participant){
    	return getParticipants().add(participant);
    }

    /**
     * 删除一个聊天者
     * @param participant
     */
    public boolean removeParticipant(String participant){
    	return getParticipants().remove(participant);
    }
    
    /**
     * 聊天者是否为空，即都退出群了
     * @return
     */
    public boolean isParticipantEmpty(){
    	return getParticipants().isEmpty();
    }
    
    /**
     * 创建消息时，使用的消息 序号
     * @return
     */
    public long getNextToken(){
    	return ++msgToken;
    }
    
    /**
     * 添加消息
     * @param participant
     * @param msg
     * @return  新消息在这个群的 token
     */
    public long addNewMsg(String participant , String msg ){
    	getChatMsgs().add(new ChatMsg(""+getNextToken(),msg,participant));
    	return getMsgToken();
    }

	public long getMsgToken() {
		return msgToken;
	}

	public void setMsgToken(long msgToken) {
		this.msgToken = msgToken;
	}


	public List<ChatMsg> getChatMsgs() {
		return chatMsgs;
	}

	public void setChatMsgs(List<ChatMsg> chatMsgs) {
		this.chatMsgs = chatMsgs;
	}

	public int getMsgMaxLive() {
		return msgMaxLive;
	}

	public void setMsgMaxLive(int msgMaxLive) {
		this.msgMaxLive = msgMaxLive;
	}

	public Date getLastAccessDate() {
		return lastAccessDate;
	}

	public void setLastAccessDate(Date lastAccessDate) {
		this.lastAccessDate = lastAccessDate;
	}    
	
}
